package com.example.FinalKeyword;
// final修饰引用类型变量的特殊情况
import java.util.Arrays;

public class FinalReferenceExample {
    // final修饰的数组引用 - 引用不能改变，但数组元素可以改变
    private final int[] numbers = {1, 2, 3};  // final引用变量，指向一个数组

    // final修饰的StringBuilder引用 - 引用不能改变，但内容可以改变
    private final StringBuilder message = new StringBuilder("Hello");  // final引用变量

    public void demonstrateFinalReferences() {
        System.out.println("原始数组: " + Arrays.toString(numbers));// [1, 2, 3]

        // 可以修改数组元素 - 修改的是引用指向的对象内容，不是引用本身
        numbers[0] = 10;
        numbers[1] = 20;
        System.out.println("修改后的数组: " + Arrays.toString(numbers));// [10, 20, 3]

        // 可以修改StringBuilder的内容 - 修改的是引用指向的对象内容
        message.append(" World");
        System.out.println("StringBuilder内容: " + message);// Hello World

        // 以下代码如果取消注释会编译错误：
        // numbers = new int[]{4, 5, 6};  // 错误：不能改变final引用指向的对象
        // message = new StringBuilder("Hi");  // 错误：不能改变final引用指向的对象
    }

    public static void main(String[] args) {
        FinalReferenceExample example = new FinalReferenceExample();
        example.demonstrateFinalReferences();
    }
}
/*
运行结果：
原始数组: [1, 2, 3]
修改后的数组: [10, 20, 3]
StringBuilder内容: Hello World
*/